package com.cmyshare.design.strategyPattern;

/**
 * @version 1.0
 * @Author cmy
 * @Date 2024/1/27 15:00
 * @desc Context使用这个Strategy接口来调用某ConcreteStrategy定义的算法。
 *       Context用一个ConcreteStrategy对象来配置。 维护一个对Strategy对象的引用。 可定义一个接口来让Stategy访问它的数据。
 */
public class Context {
    /**
     * 定义策略模式Strategy公共接口
     */
    Strategy strategy;

    /**
     * 加入策略接口Strategy及其具体策略类ConcreteStrategy。加入ConcreteStrategy即可，因为ConcreteStrategy继承了Strategy，可以向上转型。
     * @param strategy
     */
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    /**
     * 触发策略接口Strategy及其具体策略类ConcreteStrategy下的方法
     */
    public void doMethod() {
        strategy.method();
    }

    /**
     * 触发策略接口Strategy及其具体策略类ConcreteStrategy下的方法
     */
    public void doMethod2() {
        strategy.method2();
    }
}
